/**
 * 添加marker
 *    入参：BMAP
 *          map
 *          BMAP_ADDMARKER_OBJ接口中的内容
 *          callback
 *    返参： callback函数中的值（AddmarkerData接口中的内容）
 * */
interface BMAP_ADDMARKER_OBJ {
  id: number | string
  lng: number // 经度
  lat: number // 纬度
  // marker配置项（以下是常用属性，具体配置请看官网 https://mapopen-pub-jsapi.bj.bcebos.com/jsapi/reference/jsapi_reference_3_0.html#a3b3）
  options?: {
    icon?: unknown
    enableDragging?: boolean
    title?: string
  }
  [propName: string]: any
}
interface AddmarkerData {
  type: number // 1表示单击；2表示右击；3表示拖拽
  data: unknown
}
export const BMAP_ADDMARKER = (BMAP: any, map: any, addMarkerObj: BMAP_ADDMARKER_OBJ, callback: Function) => {
  const { lng, lat, options } = addMarkerObj
  const point = new BMAP.Point(lng, lat)
  const marker = new BMAP.Marker(point, options)
  callback && callback({ marker })
  // map.addOverlay(marker) // 将标注添加到地图中（使用点聚合无需使用该行代码）
  const obj: AddmarkerData = {
    type: 0,
    data: ''
  }
  // 点击marker
  marker.addEventListener('click', (e: Event) => {
    obj.type = 1
    obj.data = { ...e, id: addMarkerObj.id }
    // console.log('--您点击了marker--', obj)
    callback && callback(obj)
  })

  // 右键删除marker
  const contextMenu = new BMAP.ContextMenu()
  contextMenu.addItem(
    new BMAP.MenuItem(
      '删除',
      () => {
        obj.type = 2
        obj.data = addMarkerObj.id
        callback && callback(obj)
      },
      { width: 42 }
    )
  )
  marker.addContextMenu(contextMenu)

  // 拖拽marker
  if (options?.enableDragging) {
    marker.addEventListener('dragend', (e: Event) => {
      obj.type = 3
      obj.data = { ...e, id: addMarkerObj.id }
      // console.log('--您拖拽了marker--', obj)
      callback && callback(obj)
    })
  }
}
